/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * 
 * 
 *
 * 
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using System;
using System.Collections.Generic;
using System.Text;

using JDCloudSDK.Core.Annotation;

namespace JDCloudSDK.Vm.Model
{

    /// <summary>
    ///  实例模板配置详细信息。
    /// </summary>
    public class InstanceTemplateSpec
    {

        ///<summary>
        /// 实例规格，可查询 [DescribeInstanceTypes](https://docs.jdcloud.com/virtual-machines/api/describeinstancetypes) 接口获得指定地域或可用区的规格信息。
        ///Required:true
        ///</summary>
        [Required]
        public string InstanceType{ get; set; }
        ///<summary>
        /// 镜像ID，可查询 [DescribeImages](https://docs.jdcloud.com/virtual-machines/api/describeimages) 接口获得指定地域的镜像信息。
        ///Required:true
        ///</summary>
        [Required]
        public string ImageId{ get; set; }
        ///<summary>
        /// 实例密码。可用于SSH登录和VNC登录。长度为8\~30个字符，必须同时包含大、小写英文字母、数字和特殊符号中的三类字符。特殊符号包括：\(\)\&#x60;~!@#$%^&amp;\*\_-+&#x3D;\|{}\[ ]:&quot;;&#39;&lt;&gt;,.?/，更多密码输入要求请参见 [公共参数规范](https://docs.jdcloud.com/virtual-machines/api/general_parameters)。
        /// 如指定密钥且 &#x60;passwordAuth&#x60; 设置为 &#x60;true&#x60;，则密码不会生成注入，否则即使不指定密码系统也将默认自动生成随机密码，并以短信和邮件通知。
        /// 
        ///</summary>
        public string Password{ get; set; }
        ///<summary>
        /// 密钥对名称。仅Linux系统下该参数生效，当前仅支持输入单个密钥。
        ///</summary>
        public List<string> KeyNames{ get; set; }
        ///<summary>
        /// 用户自定义元数据。以key-value键值对形式指定，可在实例系统内通过元数据服务查询获取。最多支持20对键值对，且key不超过256字符，value不超过16KB，不区分大小写。
        /// 注意：key不要以连字符(-)结尾，否则此key不生效。
        /// 
        ///</summary>
        public List<Metadata> Metadata{ get; set; }
        ///<summary>
        /// 自定义脚本。目前仅支持启动脚本，即 &#x60;launch-script&#x60;，须 &#x60;base64&#x60; 编码且编码前数据长度不能超过16KB。
        /// **linux系统**：支持 &#x60;bash&#x60; 和 &#x60;python&#x60;，编码前须分别以 &#x60;#!/bin/bash&#x60; 和 &#x60;#!/usr/bin/env python&#x60; 作为内容首行。
        /// **Windows系统**：支持 &#x60;bat&#x60; 和 &#x60;powershell&#x60;，编码前须分别以 &#x60;&lt;cmd&gt;&lt;/cmd&gt;和&lt;powershell&gt;&lt;/powershell&gt;&#x60; 作为内容首、尾行。
        /// 
        ///</summary>
        public List<Userdata> Userdata{ get; set; }
        ///<summary>
        /// 主网卡主IP关联的弹性公网IP配置。
        ///</summary>
        public InstanceTemplateElasticIpSpec ElasticIp{ get; set; }
        ///<summary>
        /// 主网卡配置。
        ///Required:true
        ///</summary>
        [Required]
        public InstanceTemplateNetworkInterfaceAttachmentSpec PrimaryNetworkInterface{ get; set; }
        ///<summary>
        /// 系统盘配置。
        ///</summary>
        public InstanceTemplateDiskAttachmentSpec SystemDisk{ get; set; }
        ///<summary>
        /// 数据盘配置。单实例最多可挂载云硬盘（系统盘+数据盘）的数量受实例规格的限制。
        ///</summary>
        public List<InstanceTemplateDiskAttachmentSpec> DataDisks{ get; set; }
        ///<summary>
        /// 停机不计费模式。该参数仅对按配置计费且系统盘为云硬盘的实例生效，并且不是专有宿主机中的实例。配置停机不计费且停机后，实例部分将停止计费，且释放实例自身包含的资源（CPU/内存/GPU/本地数据盘）。
        /// 可选值：
        /// &#x60;keepCharging&#x60;（默认值）：停机后保持计费，不释放资源。
        /// &#x60;stopCharging&#x60;：停机后停止计费，释放实例资源。
        /// 
        ///</summary>
        public string ChargeOnStopped{ get; set; }
        ///<summary>
        /// 自动任务策略ID。
        ///</summary>
        public string AutoImagePolicyId{ get; set; }
        ///<summary>
        /// 是否允许SSH密码登录。
        /// &#x60;yes&#x60;：允许SSH密码登录。
        /// &#x60;no&#x60;：禁止SSH密码登录。
        /// 仅在指定密钥时此参数有效，指定此参数后密码即使输入也将被忽略，同时会在系统内禁用SSH密码登录。
        /// 
        ///</summary>
        public string PassWordAuth{ get; set; }
        ///<summary>
        /// 是否使用镜像中的登录凭证，不再指定密码或密钥。
        /// &#x60;yes&#x60;：使用镜像登录凭证。
        /// &#x60;no&#x60;（默认值）：不使用镜像登录凭证。
        /// 仅使用私有或共享镜像时此参数有效。若指定&#x60;imageInherit&#x3D;yes&#x60;则指定的密码或密钥将无效。
        ///</summary>
        public string ImageInherit{ get; set; }
    }
}
